package jm.data.structure.queue;

import java.util.LinkedList;

/**
 * @Description 双端队列实现
 * @date 2022/4/8 9:05
 */
public class Deque<E> {

    LinkedList<E> list = new LinkedList<>();

    /**
     * 返回队列元素数量
     * @return
     */
    public int size(){
        return list.size();
    }

    /**
     * 判断队列是否为空
     * @return
     */
    public boolean isEmpty(){
        return list.isEmpty();
    }

    /**
     * 队尾入队
     * @param e
     */
    public void enQueueRear(E e){
        list.add(e);
    }

    /**
     * 队头入队
     * @param e
     */
    public void enQueueFront(E e){
        list.add(0,e);
    }

    /**
     * 队尾出队
     * @return
     */
    public E deQueueRear(){
        return list.remove(list.size() - 1);
    }

    /**
     * 队头出队
     * @return
     */
    public E deQueueFront(){
        return list.remove(0);
    }

    /**
     * 查看队中头元素
     * @return
     */
    public E front(){
        return list.get(0);
    }

    /**
     * 查看队中尾元素
     * @return
     */
    public E rear(){
        return list.get(list.size() - 1);
    }

    /**
     * 清空队列
     */
    public void clear(){
        list.clear();
    }
}
